import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.LinkOption;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.attribute.BasicFileAttributeView;
import java.nio.file.attribute.BasicFileAttributes;
import java.nio.file.attribute.FileTime;
import java.util.Date;
import java.util.Properties;
import java.util.Scanner;
import java.util.TimeZone;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;
import javax.swing.*;

public class MailFile {
    //1、进入到微信文件 路径
    //2、遍历所有文件的，取其日期，和23:00 06:00比较
    //3、通过mail发送选取的文件
    public static void main(String[] args) throws Exception {
//        JOptionPane jOptionPane = new JOptionPane();
//        jOptionPane.showInputDialog();

        MailFile mailFile = new MailFile();
        mailFile.cdDir(mailFile);
    }





    public void cdDir(MailFile mailFile) throws Exception {
        Date date = new Date();
        TimeZone tz = TimeZone.getTimeZone("ETC/GMT-8");
        TimeZone.setDefault(tz);
        File file = new File("D:\\develop-data\\wechat-data\\WeChat Files\\wxid_hcvtce8zgbc512\\FileStorage\\File\\111");
        File[] files = file.listFiles();
        for (File a: files) {
            System.out.println(a);
            Path path = Paths.get(String.valueOf(a));
            BasicFileAttributeView fileAttributeView = Files.getFileAttributeView(path, BasicFileAttributeView.class, LinkOption.NOFOLLOW_LINKS);
            BasicFileAttributes basicFileAttributes = fileAttributeView.readAttributes();
            FileTime fileTime = basicFileAttributes.creationTime();

            System.out.println("########################################");

            String fileCreatTime = fileTime.toString().substring(11, 19);//文件初始创建时间
            String setTime = date.toString().substring(11, 19);
            System.out.println(fileCreatTime);
            System.out.println(setTime);
            int i = fileCreatTime.compareTo(setTime);
            System.out.println(i);
            System.out.println("########################################");

            if (i<0){ //大于0，说明wenjianchuangjian时间比开启ci脚本时间da；那么我们要选择这个文件
                System.out.println("###########准备发送邮件##############");
                File goalFile = new File(String.valueOf(a));//选中目标文件
                mailFile.mailFileSetting(a);
                System.out.println("###########邮件发送完毕##############");

            }
        }
    }


    /**
     * mailFile
     */
    //发件人地址
   // public static String senderAddress = "qingchen.shen@foxmail.com";
    public static String senderAddress = "891762395@qq.com";
    //收件人地址
    //public static String recipientAddress = "249541803@qq.com";
    public static String recipientAddress = "17867428826@163.com";
    //发件人账户名
    //public static String senderAccount = "891762395@qq.com";
    public static String senderAccount = "891762395@qq.com";
    //发件人账户密码
    public static String senderPassword = "jxvblvnjbffnbdji";
    public void mailFileSetting(File attachment) throws Exception {

            //1、连接邮件服务器的参数配置
            Properties props = new Properties();
            //设置用户的认证方式
            props.setProperty("mail.smtp.auth", "true");
            //设置传输协议
            props.setProperty("mail.transport.protocol", "smtp");
            //设置发件人的SMTP服务器地址
            props.setProperty("mail.smtp.host", "smtp.qq.com");
            //2、创建定义整个应用程序所需的环境信息的 Session 对象
            Session session = Session.getInstance(props);
            //设置调试信息在控制台打印出来
            session.setDebug(true);
            //3、创建邮件的实例对象
            Message msg = getMimeMessage(session,attachment);
            //4、根据session对象获取邮件传输对象Transport
            Transport transport = session.getTransport();
            //设置发件人的账户名和密码
            transport.connect(senderAccount, senderPassword);
            //发送邮件，并发送到所有收件人地址，message.getAllRecipients() 获取到的是在创建邮件对象时添加的所有收件人, 抄送人, 密送人
            transport.sendMessage(msg,msg.getAllRecipients());
            System.out.println(msg.getContent());

            //5、关闭邮件连接
            transport.close();
    }


    /**
     *
     */
    public static MimeMessage getMimeMessage(Session session,File attachment) throws Exception{
        //1.创建一封邮件的实例对象
        MimeMessage msg = new MimeMessage(session);
        //2.设置发件人地址
        msg.setFrom(new InternetAddress(senderAddress));
        /**
         * 3.设置收件人地址（可以增加多个收件人、抄送、密送），即下面这一行代码书写多行
         * MimeMessage.RecipientType.TO:发送
         * MimeMessage.RecipientType.CC：抄送
         * MimeMessage.RecipientType.BCC：密送
         */
        //3.从键盘读取收件人地址
        System.out.println("请输入收件人的邮箱（例如1008610010@qq.com）:");
        Scanner scanner = new Scanner(System.in);
        recipientAddress = scanner.nextLine();
        msg.setRecipient(MimeMessage.RecipientType.TO,new InternetAddress(recipientAddress));
        //4.设置邮件主题
        msg.setSubject("言小姐的文字铺","UTF-8");

/*
        //下面是设置邮件正文
        msg.setContent("简单的纯文本邮件！", "text/html;charset=UTF-8");


*/

        // 9. 创建附件"节点"
        MimeBodyPart attachmentNode = new MimeBodyPart();
        // 读取本地文件
        DataHandler dh2 = new DataHandler(new FileDataSource(attachment));
        // 将附件数据添加到"节点"
        attachmentNode.setDataHandler(dh2);
        // 设置附件的文件名（需要编码）
        attachmentNode.setFileName(MimeUtility.encodeText(dh2.getName()));

        // 10. 设置（文本+图片）和 附件 的关系（合成一个大的混合"节点" / Multipart ）
        MimeMultipart mm = new MimeMultipart();
        //mm.addBodyPart(text_image);
        mm.addBodyPart(attachmentNode);     // 如果有多个附件，可以创建多个多次添加
        mm.setSubType("mixed");         // 混合关系

        // 11. 设置整个邮件的关系（将最终的混合"节点"作为邮件的内容添加到邮件对象）
        msg.setContent(mm);
        //设置邮件的发送时间,默认立即发送
        msg.setSentDate(new Date());

        return msg;
    }

















}
